//给你一个数组 seats 表示一排座位，其中 seats[i] = 1 代表有人坐在第 i 个座位上，seats[i] = 0 代表座位 i 上是空的（下标
//从 0 开始）。 
//
// 至少有一个空座位，且至少有一人已经坐在座位上。 
//
// 亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座位上。 
//
// 返回他到离他最近的人的最大距离。 
//
// 
//
// 示例 1： 
//
// 
//输入：seats = [1,0,0,0,1,0,1]
//输出：2
//解释：
//如果亚历克斯坐在第二个空位（seats[2]）上，他到离他最近的人的距离为 2 。
//如果亚历克斯坐在其它任何一个空位上，他到离他最近的人的距离为 1 。
//因此，他到离他最近的人的最大距离是 2 。 
// 
//
// 示例 2： 
//
// 
//输入：seats = [1,0,0,0]
//输出：3
//解释：
//如果亚历克斯坐在最后一个座位上，他离最近的人有 3 个座位远。
//这是可能的最大距离，所以答案是 3 。
// 
//
// 示例 3： 
//
// 
//输入：seats = [0,1]
//输出：1
// 
//
// 
//
// 提示： 
//
// 
// 2 <= seats.length <= 2 * 104 
// seats[i] 为 0 或 1 
// 至少有一个 空座位 
// 至少有一个 座位上有人 
// 
// Related Topics 数组 
// 👍 160 👎 0

  
package com.zwy.leetcode.editor.cn;
/**
 * @author zwy 
 */
public class MaximizeDistanceToClosestPerson{
    public static void main(String[] args) {
        Solution solution = new MaximizeDistanceToClosestPerson().new Solution();
        int []seats = {1,0,0,0,1,0,1};
        int i = solution.maxDistToClosest(seats);
        System.out.println(i);
    }
     
/**
 *时间复杂度为:
 * @author zwy 
 */ 
      //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int maxDistToClosest(int[] seats) {
        int dis = 0,maxDis = 0,res = 0;
        // 用来标记 去记录 记录 到头的距离
        boolean flag = false;

        for(int seat : seats){
            if(seat == 0) ++dis;
            else {
                if(!flag) {
                    res = dis;
                    flag = true;
                }
                maxDis = Math.max(maxDis,dis);
                dis = 0;
            }
        }
        // 记录到尾的距离
        if(dis != 0) res = Math.max(dis,res);
        //System.out.println(res + " " + maxDis);

        return Math.max(res,(maxDis - 1) / 2 + 1);
    }
}

//leetcode submit region end(Prohibit modification and deletion)

}